/**
  ******************************************************************************
  * @file    dev_led.h
  * @author  Yun
  * @version V1.0.0
  * @date    2025-02-12
  * @brief   LED设备驱动模块头文件
  * @license EULA (End User License Agreement)
  *          Copyright (c) 2025 星瑜科技自动化 Co., Ltd. All rights reserved.
  ******************************************************************************
  */

#ifndef FRAMEWORK_DEV_LED_H
#define FRAMEWORK_DEV_LED_H

#ifdef __cplusplus
extern "C" {
#endif

/*---------------------- Includes ----------------------*/
#include "dev_common_type.h"
#include "gpio_interface.h"
/*---------------------- 类型定义 ----------------------*/

/**
  * @brief  LED设备配置结构体
  */
typedef struct Dev_Led_Cfg {
    void* pHwCfg;
    Gpio_Interface_TypeDef* pstGpioInterface;        /*!< GPIO接口函数集 */
    uint8_t u8ActState:1;                            /*!< 有效电平状态 */
    uint8_t u8InitState:1;                       /*!< 初始状态 */
    uint8_t u8RunState:1;                            /*!< 运行状态 */
    uint8_t u8LockState:1;                          /*!< 锁定状态 */
} Dev_Led_Cfg_TypeDef;

/*---------------------- 设备操作API ----------------------*/
/**
  * @brief  注册LED设备
  * @param  pstDevLedCfg: 待初始化的LED配置结构体指针
  * @param  pHw: 硬件配置指针（需与接口函数匹配）
  * @param  pstDevLedInterface: 设备接口函数集指针
  * @retval DEV_Status_TypeDef 操作状态码
  * @note   完成GPIO初始化和默认状态设置
  */
uint8_t Dev_Led_Register(Dev_Led_Cfg_TypeDef* pstDevLedCfg,
                         void* pHw,
                         Gpio_Interface_TypeDef* pstGpioInterface);

/**
  * @brief  开启LED
  * @param  pstDevLedCfg: 目标LED配置结构体指针
  * @retval DEV_Status_TypeDef 操作状态码
  * @note   操作成功会触发EVENT_DEV_LED_ON事件
  */
uint8_t Dev_Led_On(Dev_Led_Cfg_TypeDef* pstDevLedCfg);

/**
  * @brief  关闭LED
  * @param  pstDevLedCfg: 目标LED配置结构体指针
  * @retval DEV_Status_TypeDef 操作状态码
  * @note   操作成功会触发EVENT_DEV_LED_OFF事件
  */
uint8_t Dev_Led_Off(Dev_Led_Cfg_TypeDef* pstDevLedCfg);

/**
  * @brief  翻转LED状态
  * @param  pstDevLedCfg: 目标LED配置结构体指针
  * @retval DEV_Status_TypeDef 操作状态码
  * @note   操作成功会触发EVENT_DEV_LED_TOGGLE事件
  */
uint8_t Dev_Led_Toggle(Dev_Led_Cfg_TypeDef* pstDevLedCfg);

#ifdef __cplusplus
}
#endif

#endif /* FRAMEWORK_DEV_LED_H */

/************************ (C) COPYRIGHT 星瑜科技自动化 *****END OF FILE****/
